
// 注意：这是一个vuex@3 的 module 对象，只能应用在Vue2项目中
import { postAddShopCart,getShopCartList,getUpdateCartChrck,postUpdateAllCartCheck,deleteSomeCart,postDeleteAllCheckedCart} from '@/api/Detail'

const state = {
    shopCartList:[]
}
const mutations = {
    UPDATE_SHOPCARTLIST(state,shopCartList){
        state.shopCartList = shopCartList
    },
}
const actions = {
    async postAddShopCart(context,{skuId, skuNum}) {
        const res = await postAddShopCart(skuId, skuNum)
        if(res.code === 200){
            // console.log(res);
            return 'ok'
        }else{
            // async await 函数，返回值一定是一个promise对象，async函数return一个非promise时，async函数整体的返回值一定是一个成功状态的promise，结果是return的值
            // 如果async函数return的是一个promise，那么async函数整体的返回的promise的状态，取决于return的promise状态，结果是return的这个promise的结果
            // $store.dispatch 调用async await 函数时，可以接收到一个promise，可以通过try catch 来捕获失败的结果，不能直接通过async await函数的return返回值来判断 其成功或失败
            return Promise.reject('fail')
        }
    },
    async getShopCartList({commit}){
        const res = await getShopCartList()
        if(res.code === 200){
            // 注意：当请求的购物车列表为空时 res.data[0]的结果是undefined
            // 要把 res.data[0] 设置为可选列
            commit('UPDATE_SHOPCARTLIST',res.data[0]?.cartInfoList)
        }
    },
    async getUpdateCartChrck({commit},{skuId,isChecked}){
        const res = await getUpdateCartChrck(skuId,isChecked)
        if(res.code === 200){
            return 'ok'
        }else{
            return Promise.reject('fail')
        }
    },
    async postUpdateAllCartCheck({commit},{isChecked,skuIdList}){
        const res = await postUpdateAllCartCheck(isChecked,skuIdList)
        if(res.code === 200){
            return 'ok'
        }else{
            return Promise.reject('fail')
        }
    },
    async deleteSomeCart({commit},skuId){
        const res = await deleteSomeCart(skuId)
        if(res.code === 200){
            return 'ok'
        }else{
            return Promise.reject('fail')
        }
    },
    async postDeleteAllCheckedCart({commit},skuIdList){
        const res = await postDeleteAllCheckedCart(skuIdList)
        if(res.code === 200){
            return 'ok'
        }else{
            return Promise.reject('fail')
        }
    }
}
const getters = {

}

export default {
    state,
    mutations,
    actions,
    getters,
}
